package com.findyou.advice;

/**
 * @Title: LogAdvice
 * @Author 贾金博
 * @Package com.findyou.advice
 * @Date 2024/2/7 12:26
 * @description: 增强类的内部要存储增强代码
 */

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

/**
 * 1:定义方法 存储增强代码
 * 具体定义几个代码 根据插入的位置
 * 2: 使用注解配置 指定插入目标方法的配置
 *    前置  @Before
 *    后置  @AfterReturning
 *    异常  @AfterThrowing
 *    最后  @After
 *    环绕  @Around
 *    上面对应的位置是:
 *    try{
 *        前置
 *        目标方法执行
 *        后置
 *    } catch() {
 *        异常
 *    } finally {
 *        最后
 *    }
 *    3: 配置切点表达式 [选择插入的方法   切点]
 *    4: 补全注解
 *    @Component
 *    @Aspect
 *    5:开启注解支持
 */
@Component // 也要ioc容器里面
@Aspect    // 加配置切面   @Aspect = 切点 + 增强代码
@Order(20) // 值越大 优先级越低
public class LogAdvice {
    @Before("execution(* com.findyou.service.impl.*.*(..))")
    public void start() {
        System.out.println("方法开始了");
    }

    @After("execution(* com.findyou.service.impl.*.*(..))")
    public void after() {
        System.out.println("方法结束了");
    }

    @AfterThrowing("execution(* com.findyou.service.impl.*.*(..))")
    public void error() {
        System.out.println("方法报错了");
    }
}
